﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PMQLNhaHang.CustomControl;
using System.Resources;
using PMQLNhaHang.ObjExtend;
using QLNHBUS;
using QLNHDAO;

namespace PMQLNhaHang
{
    public partial class fmPhucVu : Form
    {
        private List<exPictureBox> _dsBanAnPT;       //Danh sách bàn ăn tương ứng với từng khu vực Load trong sự kiện danh sách khu vực thay đổi
        private int _indexBanAn = -1;                //Bàn ăn đang được lựa chọn thay đổi khi click qua các bàn ăn
        private List<ChiTietPhieuGoiMon> _dsCTPGMon; // Danh sách chi tiết phiếu gọi món cho từng bàn 
        private PhieuGoiMon _pgmBanAn;               //Phiếu gọi món cho từng bàn
        public fmPhucVu()
        {
            InitializeComponent();
            _dsBanAnPT = new List<exPictureBox>();
            _dsCTPGMon = new List<ChiTietPhieuGoiMon>();
        }
        #region Event
        private void fmPhucVu_Load(object sender, EventArgs e)
        {
            var dsKhuVuc = KhuVucBUS.LayDanhSachKhuVuc();
            TheHienDanhSachKhuVu(dsKhuVuc,exlbKhuVuc);
            exlbKhuVuc.SelectedIndex = 0;                //gọi chạy phương thức exlbKhuVuc_SelectedIndexChanged
            XoaThongTinBanAn();
            TheHienDanhSacnhNhomMonAn();
            LoadNhanVien(fmLogin.NhanVienInstance);
        }
        private void exlbKhuVuc_SelectedIndexChanged(object sender, EventArgs e)
        {
            var sel = (exListBoxItem)exlbKhuVuc.SelectedItem;
            var dsBanAn = BanAnBUS.LayDanhSachBanAn(sel.Id);
            _indexBanAn = -1;
            TheHienDanhSachBanAn(dsBanAn);
        }
        private void cbNhomMonAn_SelectedIndexChanged(object sender, EventArgs e)
        {
            var Item = cbNhomMonAn.SelectedItem as NhomMonAn;
            var dsmonan = MonAnBUS.LayDanhSachMonAn(Item.MaNhomMonAn);
            dgvDSMonAn.DataSource = dsmonan;
        }
        private void tsmiChuyenBan_Click(object sender, EventArgs e)
        {

        }
        private void tsmiGhepBanAn_Click(object sender, EventArgs e)
        {

        }
        private void tsmiHuyBanAn_Click(object sender, EventArgs e)
        {
            _dsBanAnPT[_indexBanAn].IsActive = false;
            _dsBanAnPT[_indexBanAn].Refresh();
        }
        //Sự kiện của picturebox khi click
        private void tempPic_Click(object sender, EventArgs e)
        {
            XoaThongTinBanAn();
            var ptb = (exPictureBox)sender;
            _indexBanAn = ptb.IdTable;                              //gán ngược lại để xác định bàn nào đang được click
            _dsCTPGMon = null;
            _pgmBanAn = null;
            KhoiPhucTrangTHaiDanhSachBanAn(_dsBanAnPT);
            PBChangeColorClick(ptb);
            if (_dsBanAnPT[_indexBanAn].IsActive)
            {
                int maBanAn = int.Parse(_dsBanAnPT[_indexBanAn].Name);
                _pgmBanAn = PhieuGoiMonBUS.LayPhieuGoiMonTheoBanAn(maBanAn);
                _dsCTPGMon = ChiTietPhieuGoiMonBUS.LayDanhSachPhieuGoiMon(_pgmBanAn.MaPhieuGoiMon);
                TheHienDanhSachChiTietPhieuGoiMon();
            }
            else
            {
                List<exChiTietPhieuGoiMon>ctpgm = new List<exChiTietPhieuGoiMon>();
                dgvDanhSachChiTietPhieuGoiMon.DataSource = ctpgm;
            }
        }
        private void btnThemMonAn_Click(object sender, EventArgs e)
        {
            #region Mô tả
            //B1: kiểm tra điều kiện của bàn ăn đang click( cần lấy là MaBanAn), và món ăn đang click
            //B2: Kiểm tra bàn ăn có đang hoạt động hay không
            //B3.1: nếu bàn ăn không hoạt động thì tạo mới 1 phiếu gọi món lưu xuống csdl
            //B3.1: tạo thêm 1 chi tiết phiếu gọi món lưu thông tin món ăn và số lượng xuống csdl
            //B3.1: add phiếu gọi món vào bảng danh sách thực đơn

            //B3.2: nếu bàn ăn hoạt động phải load danh sách chi tiết phiếu gọi món lên trong sự kiện click của bàn ăn
            //B3.2: kiểm tra mã món ăn mới thêm vô có trong danh sách chi tiết phiếu gọi món hay chưa
            //B3.2: nếu có thì cập nhật lại số lượng 
            //B3.2: không có thì thêm mới chi tiết phiếu gọi món

            //B4: tính toán lại khu vực thông tin bàn ăn
            #endregion

            DataGridViewRow row = dgvDSMonAn.SelectedRows[0];
            MonAn monAnClick = row.DataBoundItem as MonAn;
            int SoLuong = Convert.ToInt32(numericUpDown2.Value);
            int maBanAn = int.Parse(_dsBanAnPT[_indexBanAn].Name);
            if (_dsBanAnPT[_indexBanAn].IsActive)
            {
                int maPhieuGoiMon = KiemTraMonAnTrongDSCTPGMon(monAnClick);
                if (maPhieuGoiMon != -1)
                {
                    ChiTietPhieuGoiMon temp = ChiTietPhieuGoiMonBUS.LayChiTietPhieuGoiMon(maPhieuGoiMon, monAnClick.MaMonAn);
                    temp.SoLuong = temp.SoLuong + SoLuong;
                    ChiTietPhieuGoiMonBUS.CapNhapThongTinPhieuGoiMon(temp);
                    _dsCTPGMon = ChiTietPhieuGoiMonBUS.LayDanhSachPhieuGoiMon(maPhieuGoiMon);
                    TheHienDanhSachChiTietPhieuGoiMon();
                }
                else
                {
                    int id = (int)_pgmBanAn.MaPhieuGoiMon;
                    ChiTietPhieuGoiMon ctpgm = new ChiTietPhieuGoiMon();
                    ctpgm.MaPhieuGoiMon = id;
                    ctpgm.SoLuong = SoLuong;

                    ctpgm.DonGia = monAnClick.GiaHienHanh;
                    ctpgm.MaMonAn = monAnClick.MaMonAn;
                    ctpgm.Xoa = false;
                    ChiTietPhieuGoiMonBUS.ThemChiTietPhieuGoiMon(ctpgm);

                    _dsCTPGMon.Add(ctpgm);
                    //gọi hàm thêm vào bảng chi tiết gọi món
                    TheHienDanhSachChiTietPhieuGoiMon();
                }
            }
            else
            {
                _pgmBanAn = new PhieuGoiMon();
                _pgmBanAn.NgayGio = DateTime.Now;
                _pgmBanAn.MaBanAn = maBanAn;
                _pgmBanAn.ThanhToan = false;
                PhieuGoiMonBUS.ThemPhieuGoiMon(_pgmBanAn);

                int id = (int)_pgmBanAn.MaPhieuGoiMon;
                ChiTietPhieuGoiMon ctpgm = new ChiTietPhieuGoiMon();
                ctpgm.MaPhieuGoiMon = id;
                ctpgm.SoLuong = SoLuong;

                ctpgm.DonGia = monAnClick.GiaHienHanh;
                ctpgm.MaMonAn = monAnClick.MaMonAn;
                ctpgm.Xoa = false;
                ChiTietPhieuGoiMonBUS.ThemChiTietPhieuGoiMon(ctpgm);
                _dsCTPGMon = new List<ChiTietPhieuGoiMon>();
                _dsCTPGMon.Add(ctpgm);
                TheHienDanhSachChiTietPhieuGoiMon();
                _dsBanAnPT[_indexBanAn].IsActive = true;
                _dsBanAnPT[_indexBanAn].Refresh();
            }
        }
        private void btnHuyMonAn_Click(object sender, EventArgs e)
        {

        }
       
        #endregion

        #region Method

        private void TheHienDanhSachBanAn(List<BanAn> dsBanAn)
        {
            flowLayoutPanel1.Controls.Clear();
            _dsBanAnPT.Clear();
            exPictureBox tempPic;
            int xlocation, ylocation;
            int exptHeigh = 100, exptWidth = 85;
            
            for (int i = 0; i < dsBanAn.Count; i++)
            {
                var resl = dsBanAn[i].PhieuGoiMons.Where(c => c.ThanhToan == false).SingleOrDefault() != null;
                tempPic = new exPictureBox();
                tempPic.IsActive = resl;
                xlocation = exptWidth + 40;
                ylocation = exptHeigh + 40;
                tempPic.Location = new Point(xlocation * (i % 3), ylocation * (i / 3));
                tempPic.Location = new Point(xlocation, ylocation);
                tempPic.Name = dsBanAn[i].MaBanAn.ToString();
                tempPic.NameTable = dsBanAn[i].Ten;
                tempPic.IdTable = i;
                tempPic.Size = new Size(exptWidth, exptHeigh);
                tempPic.SizeMode = PictureBoxSizeMode.Zoom;
                tempPic.TabIndex = 0;
                tempPic.TabStop = false;
                tempPic.ContextMenuStrip = cmsPictureEX;
                tempPic.Click += new EventHandler(tempPic_Click);
                flowLayoutPanel1.Controls.Add(tempPic);
                _dsBanAnPT.Add(tempPic);
            }
        }
        private void TheHienDanhSacnhNhomMonAn()
        {
            cbNhomMonAn.DataSource = NhomMonAnBUS.LayDanhSachNhomMonAn();
            cbNhomMonAn.ValueMember = "MaNhomMonAn";
            cbNhomMonAn.DisplayMember = "Ten";
        }
        private void XoaThongTinBanAn()
        {
            this.lbDiaDiemGet.Text = "";
            this.lbThoiGianGet.Text = "";
            this.lbTongTienGet.Text = "";
            this.tbGhiChuGet.Text = "";
        }
        private void TheHienDanhSachChiTietPhieuGoiMon()
        {
            int TongTien = 0;
            var dsphieugoi = new List<exChiTietPhieuGoiMon>();
            exChiTietPhieuGoiMon temp;
            for (int i = 0; i < _dsCTPGMon.Count; i++)
            {
                temp = new exChiTietPhieuGoiMon();
                temp.Stt = i;
                temp.TenMonAn = _dsCTPGMon[i].MonAn.Ten;
                temp.SoLuong = Convert.ToInt32(_dsCTPGMon[i].SoLuong);
                temp.DonViTinh = _dsCTPGMon[i].MonAn.NhomMonAn.Ten;
                temp.DonGia = Convert.ToInt32(_dsCTPGMon[i].DonGia);
                temp.ThanhTien =
                    Convert.ToInt32(_dsCTPGMon[i].DonGia * _dsCTPGMon[i].SoLuong);
                TongTien = TongTien+temp.ThanhTien;
                dsphieugoi.Add(temp);
            }
            dgvDanhSachChiTietPhieuGoiMon.DataSource = dsphieugoi;
            lbThoiGianGet.Text = _pgmBanAn.NgayGio.ToString();
            lbDiaDiemGet.Text = _dsBanAnPT[_indexBanAn].NameTable;
            lbTongTienGet.Text = Utils.StringHelper.BoDamCham(TongTien)+"VNĐ";
        }
        private int KiemTraMonAnTrongDSCTPGMon(MonAn ma)
        {
            var kq = _dsCTPGMon.Where(c => c.MaMonAn == ma.MaMonAn).SingleOrDefault();
            if(kq!=null)
                return kq.MaPhieuGoiMon;
            return -1;
        }
        public void LoadNhanVien(NhanVien nv)
        {
            lbTenNhanVien.Text = nv.HoTen;
            lbTaiKhoan.Text = nv.TenDangNhap;
            if (nv.Loai == 0)
            {
                lbChucVu.Text = "Thu Ngân";
            }
            else
            {
                lbChucVu.Text = "Quản Lý";
            }
            if (nv.Hinh != null)
            {
                Byte[] hinhAnh = nv.Hinh.ToArray();
                Image avatar = fmQLNguoiDungNhanVien.ConvertByteToImage(hinhAnh);
                ptbHinhAnh.Image = avatar;
            }
        }
        public static void KhoiPhucTrangTHaiDanhSachBanAn(List<exPictureBox> dsBanAnPT)
        {
            for (int i = 0; i < dsBanAnPT.Count; i++)
            {
                dsBanAnPT[i].BackColor = System.Drawing.SystemColors.Control;
                dsBanAnPT[i].BorderStyle = System.Windows.Forms.BorderStyle.None;
            }
        }
        public static void PBChangeColorClick(exPictureBox ptb)
        {
            ptb.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))),
                                                          ((int)(((byte)(192)))));
            ptb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        }
        public static void TheHienDanhSachKhuVu(List<KhuVuc> dsKhuVuc, exListBox exlbkv)
        {
            ResourceManager rm = new ResourceManager(typeof(exListBox));
            Image img = (Image)rm.GetObject("Table_icon");
            exlbkv.Items.Clear();
            for (int i = 0; i < dsKhuVuc.Count; i++)
            {
                string detail = dsKhuVuc[i].SoBan.ToString();
                exListBoxItem ex = new exListBoxItem(dsKhuVuc[i].MaKhuVuc, dsKhuVuc[i].Ten, detail, img);
                exlbkv.Items.Add(ex);
            }
        }
        #endregion
    }
}
